image: Avoid some unnecessary signal connections
authorTimm Bäder <mail@baedert.org>
Sun, 30 Dec 2018 19:37:48 +0000 (20:37 +0100)
committerTimm Bäder <mail@baedert.org>
Mon, 31 Dec 2018 11:44:02 +0000 (12:44 +0100)
Equivalent if fd9879e5ffba2c58b897155b39ff79584b3618e0 but for GtkImage.

gtk/gtkimage.c

index 1546256341fcaab869df04f3d53fd148568d5140..20e9bc41e377b9de50799d85fe449419d8e69bcb 100644 (file)
@@ -918,15 +918,21 @@ gtk_image_set_from_paintable (GtkImage     *image,
 
   if (paintable)
     {
+      const guint flags = gdk_paintable_get_flags (paintable);
+
       _gtk_icon_helper_set_paintable (priv->icon_helper, paintable);
-      g_signal_connect (paintable,
-                        "invalidate-contents",
-                        G_CALLBACK (gtk_image_paintable_invalidate_contents),
-                        image);
-      g_signal_connect (paintable,
-                        "invalidate-size",
-                        G_CALLBACK (gtk_image_paintable_invalidate_size),
-                        image);
+
+      if ((flags & GDK_PAINTABLE_STATIC_CONTENTS) == 0)
+        g_signal_connect (paintable,
+                          "invalidate-contents",
+                          G_CALLBACK (gtk_image_paintable_invalidate_contents),
+                          image);
+
+      if ((flags & GDK_PAINTABLE_STATIC_SIZE) == 0)
+        g_signal_connect (paintable,
+                          "invalidate-size",
+                          G_CALLBACK (gtk_image_paintable_invalidate_size),
+                          image);
       g_object_unref (paintable);
     }
 
@@ -1215,12 +1221,17 @@ gtk_image_clear (GtkImage *image)
   if (storage_type == GTK_IMAGE_PAINTABLE)
     {
       GdkPaintable *paintable = _gtk_icon_helper_peek_paintable (priv->icon_helper);
-      g_signal_handlers_disconnect_by_func (paintable,
-                                            gtk_image_paintable_invalidate_contents,
-                                            image);
-      g_signal_handlers_disconnect_by_func (paintable,
-                                            gtk_image_paintable_invalidate_size,
-                                            image);
+      const guint flags = gdk_paintable_get_flags (paintable);
+
+      if ((flags & GDK_PAINTABLE_STATIC_CONTENTS) == 0)
+        g_signal_handlers_disconnect_by_func (paintable,
+                                              gtk_image_paintable_invalidate_contents,
+                                              image);
+
+      if ((flags & GDK_PAINTABLE_STATIC_SIZE) == 0)
+        g_signal_handlers_disconnect_by_func (paintable,
+                                              gtk_image_paintable_invalidate_size,
+                                              image);
     }
 
   _gtk_icon_helper_clear (priv->icon_helper);